//////////////////////////////////////////////////////////////////////////
//             Copyright 2014  All Rights Reserved                //
//////////////////////////////////////////////////////////////////////////
/* =======================================================================
 * 系统名   : 
 * 子系统名 : 
 * Class名  : FileSearch.java
 * 概要     : 
 * 改版履历 : 
 * 版本                     日期                    作者名             备注
 * 1.0.0    2015年1月30日        郭恩洲          初次作成
 * ======================================================================= */
package common;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class FileSearch {
	
	
	
	/**
	 * 递归方法
	 * @param baseDirName  公共目录
	 * @param targetFileName 目标文件
	 * @return
	 */
	public static List<String>  findFiles(String baseDirName, String targetFileName) {
		 /**
         * 算法简述： 从某个给定的需查找的文件夹出发，搜索该文件夹的所有子文件夹及文件， 若为文件，则进行匹配，匹配成功则加入结果集，若为子文件夹，则进队列。 队列不空，重复上述操作，队列为空，程序结束，返回结果。
         */
        List<String> classFiles = new ArrayList<String>();
        String tempName = null;
        // 判断目录是否存在
        File baseDir = new File(baseDirName);
        System.out.println(baseDir.getPath());
        if (!baseDir.exists() || !baseDir.isDirectory()) {
            System.out.println("search error：" + baseDirName + "is not a dir！");
        } else {
            String[] filelist = baseDir.list();
            for (int i = 0; i < filelist.length; i++) {
                File readfile = new File(baseDirName + File.separator + filelist[i]);
                if (readfile.isDirectory()) {
                    classFiles.addAll(findFiles(readfile.getPath(), targetFileName));
                } else {
                    tempName = readfile.getName();
                    if (tempName.endsWith(targetFileName)) {
                        classFiles.add(tempName);
                    }
                }
            }
        }
        return classFiles;
	}
	
	
	public static void main(String[] args) {
		List<String> list = FileSearch.findFiles("D:\\", ".java");
		for (String string : list) {
			System.out.println(string);
		}
	}

}
